home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / DB_CLIPP / 0358.ZIP / DB3SCR1.ASM < prev    next >
Assembly Source File  |  1986-08-01  |  12KB  |  383 lines

  1. .8086   
  2. ;                  db3scr.asm
  3. ;
  4. ;
  5. ;
  6. ;       *********************************************************
  7. ;       * To: P.C. magazine                                     *
  8. ;       *                                                       *
  9. ;       * try this utility out for dbase 3....                  *
  10. ;       *                                                       *
  11. ;       * assemble/link/exe2bin this file                       *
  12. ;       *                                                       *
  13. ;       * then edit a dbase screen file (.prg) , insert a       *
  14. ;       *                                                       *
  15. ;       * ? '~00007924'                                         *
  16. ;       * quit dbase then type in db3scr1                       *
  17. ;       *                                                       *
  18. ;       * load dbase, then DO your program                      *
  19. ;       *                                                       *
  20. ;       * you will notice a box appear, this utility will       *
  21. ;       * intercept dbase interupt 10h function 9 calls         *
  22. ;       * (write character + attribute) and then check for      *
  23. ;       * the ~ character if found it will accept starting x,y  *
  24. ;       * locations for a box and xlen,ylen                     *
  25. ;       *     x y xlyl                                          *
  26. ;       * ? '~00007924'                                         *
  27. ;       *                                                       *
  28. ;       * result: a very fast box maker in a rather slow        *
  29. ;       * interpreter                                           *
  30. ;       *                                                       *
  31. ;       *       Try it out, I stayed up lots of nights          *
  32. ;       * when I first got MASM.                                *
  33. ;       * Hope it is of interest to your readers, It is not     *
  34. ;       * too long for typeing                                  *
  35. ;       *                                                       *
  36. ;       *                       Sincerely                       *
  37. ;       *                                                       *
  38. ;       *                       Mark J Landy                    *
  39. ;       *                                                       *
  40. ;       *                       137 Homewood Ave.               *
  41. ;       *                       Yonkers, N.Y. 10701             *
  42. ;       *                                                       *
  43. ;       *                       Programmer/ Consultant          *
  44. ;       *                                                       *
  45. ;       *                                                       *
  46. ;       *                       phone: 914 969-0934             *
  47. ;       *                                                       *
  48. ;       *********************************************************
  49. ;
  50. ;
  51. ;
  52. ;
  53. ;
  54. ;
  55. ;
  56. ;
  57. ;
  58. ;
  59. ;
  60. ;                  test for use of function 9h in in 10h
  61. title db3scr.asm
  62. page 60,132
  63.           UP_L           EQU     201   ;ALL DOUBLE BARS
  64.           UP_R           EQU     187
  65.           L_L            EQU     200
  66.           L_R            EQU     188
  67.           HORIZ          EQU     205
  68.           VERT           EQU     186
  69. cseg     segment
  70.      assume cs:cseg
  71.           org     0100h
  72.         ASSUME DS:CSEG
  73. entry:     jmp     initialize
  74. ;
  75. ;all data
  76. ;
  77.  
  78. UPL_V_DH       DB   0        ; CONST FOR ROW Y DH
  79. UPL_H_DL       DB   0        ; CONST FOR COL X DL
  80. MAX_CHAR_H     DB   0        ; LENGTH OF X VECTOR
  81. MAX_CHAR_V     DB   0        ; LENGTH OF Y VECTOR
  82. R1CHARYES       DB      0
  83. R2CHARYES       DB      0
  84. R3CHARYES       DB      0
  85. R4CHARYES       DB      0
  86. R5CHARYES       DB      0
  87. R6CHARYES       DB      0
  88. R7CHARYES       DB      0
  89. R8CHARYES       DB      0
  90. TNUMBER         DB      0
  91. out_mess        db      '(c)  1986  Mark J Landy ',0ah,0dh,0ah,0dh
  92.                 db      '\/...db3 screen enhancement installed....\/','$'
  93.  
  94. cpyright       db     "(c) copyright 1986 Mark J Landy          co."
  95. oldinterrupt10     dd     ?
  96.  
  97. ;
  98. BOX_LOOP:
  99.           CALL     INIT_CODE
  100.           MOV     DH,CS:[UPL_V_DH]
  101.           MOV     DL,CS:[UPL_H_DL]
  102.           CALL     SET_POS
  103.           MOV     AL,HORIZ     ; HORIZ LINE ASCII DOUBLE BAR
  104.           MOV     CL,CS:[MAX_CHAR_H]   ;UPPER
  105.           CALL     SCR_PRINT
  106.           MOV     DH,CS:[UPL_V_DH];+MAX_CHAR_V
  107.           ADD     DH,CS:[MAX_CHAR_V]
  108.           MOV     DL,CS:[UPL_H_DL]
  109.           CALL     SET_POS
  110.           MOV     AL,HORIZ     ; HORIZ LINE ASCII DOUBLE BAR
  111.           MOV     CL,CS:[MAX_CHAR_H]   ;LOWER
  112.           CALL     SCR_PRINT
  113.           MOV     DH,CS:[UPL_V_DH]
  114.           MOV     DL,CS:[UPL_H_DL]
  115.           CALL     SET_POS
  116.           MOV     AL,UP_L      ;UPPER LEFT
  117.           MOV     CL,1
  118.           CALL     SCR_PRINT
  119.           MOV     DH,CS:[UPL_V_DH];+MAX_CHAR_V
  120.           ADD     DH,CS:[MAX_CHAR_V]
  121.           MOV     DL,CS:[UPL_H_DL]
  122.           CALL     SET_POS
  123.           MOV     AL,L_L          ;LOWER LEFT
  124.           MOV     CL,1
  125.           CALL     SCR_PRINT
  126.           MOV     DH,CS:[UPL_V_DH];+MAX_CHAR_V
  127.           ADD     DH,CS:[MAX_CHAR_V]
  128.           MOV     DL,CS:[UPL_H_DL];+MAX_CHAR_H
  129.           ADD     DL,CS:[MAX_CHAR_H]
  130.           CALL     SET_POS
  131.           MOV     AL,L_R          ;LOWER RIGHT
  132.           MOV     CL,1
  133.           CALL     SCR_PRINT
  134.           MOV     DH,CS:[UPL_V_DH]
  135.           MOV     DL,CS:[UPL_H_DL];+MAX_CHAR_H
  136.           ADD     DL,CS:[MAX_CHAR_H]
  137.           CALL     SET_POS
  138.           MOV     AL,UP_R      ;UPPER RIGHT
  139.           MOV     CL,1
  140.           CALL     SCR_PRINT
  141. ;TWO VERTICAL LINES
  142.           MOV     DH,CS:[UPL_V_DH]
  143.           MOV     DL,CS:[UPL_H_DL]
  144.           CALL     VERT_LOOP
  145.           MOV     DH,CS:[UPL_V_DH]
  146.           MOV     DL,CS:[UPL_H_DL]      ;   +MAX_CHAR_H
  147.           ADD     DL,CS:[MAX_CHAR_H]
  148.           CALL     VERT_LOOP
  149.                          ;RETURN TO ONE CHAR RIGHT AND BELOW OF
  150.                          ;BOX     UPLH, UPLV
  151.           MOV     DH,CS:[UPL_V_DH]
  152.           MOV     DL,CS:[UPL_H_DL]
  153.           ADD     DH,1
  154.           ADD     DL,1
  155.           CALL     SET_POS
  156.           RET     ;END BOX LOOP
  157.  
  158.  
  159. VERT_LOOP:               ;ASSUMES CHARACTER IS IN AL
  160.                     ;AND NUMBER OF REPEATES IN CL
  161. ;CHECK LOOP BEGINS
  162.           INC     DH
  163.           CALL     SET_POS
  164.           MOV     AL,VERT
  165.           MOV     CL,1
  166.           CALL     SCR_PRINT
  167.           MOV     AH,CS:[UPL_V_DH]      ;+MAX_CHAR_V-1
  168.           ADD     AH,CS:[MAX_CHAR_V]
  169.           SUB     AH,1
  170.           CMP     AH,DH
  171.           JNZ     VERT_LOOP
  172. ;CHECK LOOP ENDS
  173.           RET
  174. INIT_CODE:                      ;SETS SCREEN TO UPPER LEFT CORNER
  175.           MOV     AH,2
  176.           MOV     BH,0
  177.           MOV     DH,0
  178.           MOV     DL,0
  179.           INT     10H
  180.           RET
  181. SET_POS:
  182.           MOV     AH,2
  183.           MOV     BH,0            ;SCREEN PAGE
  184. ;          MOV     DH,POS        ROW ASSUMES THAT REGISTER IS LOADED
  185. ;          MOV     DL,POS        COL PRIOR TO CALL
  186.           INT     10H
  187.           RET
  188. SCR_PRINT:
  189.           MOV     AH,9          ;ASSUMES CHAR CODE IN AL REGISITER
  190.           MOV     BH,0          ;PAGE NUMBER
  191.           MOV     BL,7
  192. ;          MOV     CL,NUM_CHAR_FIL  80 CHAR
  193.           MOV     CH,0          ; HIGH BIT OF CX REG
  194.           INT     10H          ;VIDEO SERVICES ROUTINE BIOS
  195.           RET
  196. ; THE ABOVE ROUTINE ASSUME THE PRESENCE
  197. ;PRIOR TO CALLING SCR_PRINT YOU MUST
  198. ;LOAD AL WITH ASCII CHAR AND LOAD CL WITH DEC NUMBER OF REPEATS
  199. ;
  200. ;     end of screen builds
  201. ;
  202. ;
  203. R1CYES    PROC NEAR
  204.         sub     al,30h
  205.         mov     cl,10
  206.         mul     cl
  207.         mov     cs:tnumber,al
  208.           mov     cs:R1CHARYES,0
  209.           MOV     CS:R2CHARYES,1
  210.           RET
  211. R1CYES  ENDP
  212. R2CYES   PROC NEAR
  213.         sub     al,30h
  214.         add     al,cs:[tnumber]
  215.         mov     cs:upl_v_dh,al
  216.           mov     cs:R2CHARYES,0
  217.           MOV     CS:R3CHARYES,1
  218.           RET
  219. R2CYES  ENDP
  220. R3CYES   PROC NEAR
  221.         sub     al,30h
  222.         mov     cl,10
  223.         mul     cl
  224.         mov     cs:tnumber,al
  225.           mov     cs:R3CHARYES,0
  226.           MOV     CS:R4CHARYES,1
  227.           RET
  228. R3CYES  ENDP
  229. R4CYES   PROC NEAR
  230.         sub     al,30h
  231.         add     al,cs:[tnumber]
  232.         mov     cs:upl_h_dl,al
  233.           mov     cs:R4CHARYES,0
  234.           MOV     CS:R5CHARYES,1
  235.           RET
  236. R4CYES  ENDP
  237. R5CYES   PROC NEAR
  238.         sub     al,30h
  239.         mov     cl,10
  240.         mul     cl
  241.         mov     cs:tnumber,al
  242.           mov     cs:R5CHARYES,0
  243.           MOV     CS:R6CHARYES,1
  244.           RET
  245. R5CYES  ENDP
  246. R6CYES   PROC NEAR
  247.         sub     al,30h
  248.         add     al,cs:[tnumber]
  249.         mov     cs:max_char_h,al
  250.           mov     cs:R6CHARYES,0
  251.           MOV     CS:R7CHARYES,1
  252.           RET
  253. R6CYES  ENDP
  254. R7CYES   PROC NEAR
  255.         sub     al,30h
  256.         mov     cl,10
  257.         mul     cl
  258.         mov     cs:tnumber,al
  259.           mov     cs:R7CHARYES,0
  260.           mov     cs:R8CHARYES,1
  261.           RET
  262. R7CYES  ENDP
  263. R8CYES   PROC NEAR
  264.         sub     al,30h
  265.         add     al,cs:[tnumber]
  266.         mov     cs:max_char_v,al
  267.           mov     cs:R8CHARYES,0
  268.           RET
  269. R8CYES  ENDP
  270.  
  271. newinterrupt10     proc     far
  272.           cmp     ah,9
  273.           jz     checkchar
  274.           jmp     cs:[oldinterrupt10]
  275. checkchar: 
  276.         CMP     AL,'~'
  277.         JZ      CS:SETR1CHAR
  278.           push     ax
  279.           push     bx
  280.           push     cx
  281.           push     dx
  282.           push     di
  283.           push     ds
  284.           push     es
  285.         cmp     cs:[R1CHARYES],1
  286.         jz      GOC1             ;1ST
  287.         CMP     CS:[R2CHARYES],1
  288.         JZ      GOC2             ;2ND
  289.         CMP     CS:[R3CHARYES],1
  290.         JZ      GOC3             ;3RD
  291.         CMP     CS:[R4CHARYES],1
  292.         JZ      GOC4             ;4TH
  293.         CMP     CS:[R5CHARYES],1
  294.         JZ      GOC5             ;5TH
  295.         CMP     CS:[R6CHARYES],1
  296.         JZ      GOC6             ;6TH
  297.         CMP     CS:[R7CHARYES],1
  298.         JZ      GOC7             ;7TH
  299.         CMP     CS:[R8CHARYES],1
  300.         JZ      GOC8             ;8TH
  301.           pop     es
  302.           pop     ds
  303.           pop     di
  304.           pop     dx
  305.           pop     cx
  306.           pop     bx
  307.           pop     ax
  308.           mov     ah,9
  309.           jmp     cs:[oldinterrupt10]
  310. exit_10: 
  311.           pop     es
  312.           pop     ds
  313.           pop     di
  314.           pop     dx
  315.           pop     cx
  316.           pop     bx
  317.           pop     ax
  318.           mov     ah,9
  319.           mov     al,32
  320.           jmp     cs:[oldinterrupt10]
  321. SETR1CHAR:
  322.           mov     cs:R1CHARYES,1
  323.           mov     al,32
  324.           jmp     cs:[oldinterrupt10]
  325. GOC1:
  326.         CALL    NEAR PTR R1CYES
  327.         JMP     CS:EXIT_10
  328. GOC2:           
  329.         CALL    NEAR PTR R2CYES
  330.         JMP     CS:EXIT_10
  331. GOC3:
  332.         CALL    NEAR PTR R3CYES
  333.         JMP     CS:EXIT_10
  334. GOC4:
  335.         CALL    NEAR PTR R4CYES
  336.         JMP     CS:EXIT_10
  337. GOC5:
  338.         CALL    NEAR PTR R5CYES
  339.         JMP     CS:EXIT_10
  340. GOC6:
  341.         CALL    NEAR PTR R6CYES
  342.          JMP     CS:EXIT_10
  343. GOC7:
  344.         CALL    NEAR PTR R7CYES
  345.         JMP     CS:EXIT_10
  346. GOC8:
  347.         CALL    NEAR PTR R8CYES
  348.         call    box_loop
  349.         JMP     CS:EXIT_10
  350. ; begin of screen builds
  351. ;
  352. newinterrupt10     endp
  353. ;
  354. ;
  355. ;initialization
  356.  
  357. initialize:   
  358.                 push    cs
  359.                 pop     ds
  360.                 mov     dx,offset out_mess
  361.                 mov     ah,9
  362.                 int     21h
  363.                sub     ax,ax
  364.                mov     ds,ax
  365.                les     bx,dword ptr ds:[10h * 4]
  366.                mov     word ptr cs:[oldinterrupt10],bx
  367.                mov     word ptr cs:[oldinterrupt10 + 2],es
  368.                push     cs
  369.                pop     ds
  370.                mov     dx,offset newinterrupt10
  371.                mov     ax,2510h
  372.                int     21h
  373.                mov     dx,offset initialize
  374.                int     27h     ;terminate but stay resident
  375. cseg               ends
  376.                end     entry
  377.  
  378.  
  379.  
  380.  
  381. ze
  382.                int    
  383.